import axios from "axios";
import { useStore } from '@/store'
import { ElLoading, ElMessage } from 'element-plus'
const store = useStore()

// axios.defaults.baseURL = ''  //正式
// axios.defaults.baseURL = 'http://test' //测试
const service = axios.create({
    // baseURL: process.env.NODE_ENV === "production" ? process.env.VUE_APP_REQUEST_URL : "/", // api的base_url
    timeout: 30000 // 请求超时时间
});

//post请求头
// axios.defaults.headers.post["Content-Type"] ="application/x-www-form-urlencoded;charset=UTF-8";
//设置超时
// axios.defaults.timeout = 10000;
// ts定义，不定义使用会显示错误
declare module 'axios' {
    interface AxiosInstance {
        (config: AxiosRequestConfig): Promise<any>
    }
}

service.interceptors.request.use(
    config => {
        // config.headers["token"] = sessionStorage.getItem("token");
        config.headers["token"] = store.openid
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

service.interceptors.response.use(
    response => {
        if (response.status == 200) {
            // console.log(response)
            return Promise.resolve(response.data);
        } else {
            return Promise.reject(response);
        }
    },
    error => {
        // alert(`异常请求：${JSON.stringify(error.message)}`)
        // console.log(`异常请求：${JSON.stringify(error.message)}`)
        return Promise.reject(error);
    }
);
// export default service;

const request = ({url, method, data, params}: { url: string; method: string; data?: any; params?: any }, isLoading: boolean = false, isShowErrToast: boolean = false) => {
    return new Promise((resolve, reject) => {
        let loading;
        if (isLoading) {
            loading = ElLoading.service({
                lock: true,
                text: '加载中...',
                background: 'rgba(0, 0, 0, 0.7)',
            })
        }
        service({
            url,
            method,
            data,
            params,
        }).then(res => {
            if (isLoading) {
                loading.close()
            }
            if (res?.code && res.code == 200) {
                resolve(res)
            } else if (res?.code && res.code == 500) {
                if (isShowErrToast) {
                    ElMessage.closeAll()
                    ElMessage({
                        message: res?.msg ? res.msg : '请求失败，请稍后重试！',
                        type: 'error',
                    })
                }
                reject(res)
            } else {
                resolve(res)
            }
            //   resolve(res.data)
        }).catch(err => {
            console.log(err)

            if (isLoading) {
                loading.close()
            }
            if (isShowErrToast) {
                ElMessage.closeAll()
                ElMessage({
                    message: '请求失败，请稍后重试！',
                    type: 'error',
                })
            }
            // 未登录情况提示，正常未登录应该不在报错里体现的，应该在成功里面返回不一样的code来判断，但后端这样返回没办法
            if (err?.response?.data.status == 500) {
                ElMessage.closeAll()
                ElMessage({
                    message: err.response.data?.message ? err.response.data.message : '请求失败，请稍后重试！',
                    type: 'error',
                })
            }
            reject(err)
        });
    })
}
export default request

// export default {
//   post(url, data) {
//     return new Promise((resolve, reject) => {
        
//       service({
//           method: 'post',
//           url,
//           data: data,
//         })
//         .then(res => {
//           resolve(res.data)
//         })
//         .catch(err => {
//           reject(err)
//         });
//     })
//   },

//   get(url, data) {
//     return new Promise((resolve, reject) => {
//       service({
//           method: 'get',
//           url,
//           params: data,
//         })
//         .then(res => {
//           resolve(res.data)
//         })
//         .catch(err => {
//           reject(err)
//         })
//     })
//   }
// };